let allKeys = []
let allValues = []
let allRightKeys = []
let allRightValues = []
// 初始化共有变量
export function init () {
  allKeys = []
  allValues = []
}

export function initRight () {
  allRightKeys = []
  allRightValues = []
}
export function parseJson (jsonObj, receiveKey) {
  // sessionStorage.clear()

  // console.log(jsonObj.build)
  // 循环所有键
  for (var key in jsonObj) {
    // console.log(key)
    if (receiveKey && receiveKey !== 'all') {
      key = receiveKey
    }
    const element = jsonObj[key]

    // 如果对象类型为object类型且数组长度大于0 或者 是对象 ，继续递归解析
    // console.log(element, '==========', key, '==========', receiveKey, '==========', jsonObj['dmg'])
    if (typeof element === 'object') {
      //   allKeys.push(key);
      //   allValues.push(element);
      parseJson(element)
    } else {
      allKeys.push(key)
      allValues.push(element)
      // console.log(allKeys, 'allKeys')
    }
    sessionStorage.setItem('allKeys', JSON.stringify([...new Set(allKeys)]))
    sessionStorage.setItem('allValues', JSON.stringify([...new Set(allValues)]))
  }
}
// 右侧值的获取
export function parseRightJson (jsonObj, receiveKey) {
  // sessionStorage.clear()

  // console.log(jsonObj.build)
  // 循环所有键
  for (var key in jsonObj) {
    // console.log(key)
    if (receiveKey && receiveKey !== 'all') {
      key = receiveKey
    }
    const element = jsonObj[key]

    // 如果对象类型为object类型且数组长度大于0 或者 是对象 ，继续递归解析
    // console.log(element, '==========', key, '==========', receiveKey, '==========', jsonObj['dmg'])
    if (typeof element === 'object') {
      //   allKeys.push(key);
      //   allValues.push(element);
      parseRightJson(element)
    } else {
      allRightKeys.push(key)
      allRightValues.push(element)
      // console.log(allRightKeys, 'allRightKeys')
    }
    sessionStorage.setItem('allRightKeys', JSON.stringify([...new Set(allRightKeys)]))
    sessionStorage.setItem('allRightValues', JSON.stringify([...new Set(allRightValues)]))
  }
}

export function getParkeys (jsonObj) {
  return Object.keys(jsonObj)
}
export function getRightParKeys (jsonObj) {
  return Object.keys(jsonObj)
}

// 获取固定的 key value

// left key 一维

export function getLeftkeyPar (obj) {
  const parKey = []
  // eslint-disable-next-line no-unused-vars
  for (const key in obj.desc) {
    // console.log()
    parKey.push(obj.desc[key].key)
  }
  return parKey
}
// child数组
export function getLeftkeyChild (obj) {
  const childKey = []
  // eslint-disable-next-line no-unused-vars
  for (const key in obj.desc) {
    // eslint-disable-next-line no-unused-vars
    for (const item in (obj.desc[key].sub)) {
      // console.log()
      childKey.push(obj.desc[key].sub[item].key)
    }
  }
  return childKey
}
// 获取 original 、checked 相关键名
export function getRightOriginalKey (obj) {
  return {
    rightOriginKey: Object.keys(obj.original),
    rightCheckedKey: Object.keys(obj.checked)
  }
}
// 获取original 、checked 子级key
export function getRightOriginChildKey (obj) {
  const originalKey = Object.keys(obj.original)
  const checkedKey = Object.keys(obj.checked)
  const originChildKey = []
  const checkedChildKey = []
  originalKey.forEach(item => {
    originChildKey.push(Object.keys(obj.original[item]))
  })
  checkedKey.forEach(item => {
    checkedChildKey.push(Object.keys(obj.checked[item]))
  })
  return {
    originChildKeys: [].concat.apply([], originChildKey),
    checkedChildKeys: [].concat.apply([], checkedChildKey)
  }
}
// 获取 checked 所有子级的val
export function getRightCheckedChildVal (obj) {
  const checkedChildValArr = []
  const checkedKey = Object.keys(obj.checked)
  const checkedChildKey = []
  checkedKey.forEach(item => {
    checkedChildKey.push(obj.checked[item])
  })
  for (let i = 0; i < checkedChildKey.length; i++) {
    // eslint-disable-next-line no-unused-vars
    for (const key in checkedChildKey[i]) {
      if (checkedChildKey[i][key].substr(0, 1) === ' ' || checkedChildKey[i][key].substr(checkedChildKey[i][key].length - 1, 1) === ' ') {
        checkedChildValArr.push({
          parLabel: 'checked',
          label: checkedChildKey[i][key],
          key: key
        })
      }
    }
  }
  // console.log(checkedChildValArr)
  return checkedChildValArr
}
// 共有元素对比差异
// export function getArrDifference(arr1, arr2) {
//     return arr1.concat(arr2).filter(function (v, i, arr) {
//         return arr.indexOf(v) === arr.lastIndexOf(v)
//     })
// }
// 元素对比分别取出差异
/**
 *
 * @param {*} arr1  左侧desc父级数组集合
 * @param {*} arr2  右侧original 父级数组集合
 * @param {*} arr3  右侧 original 子级数组集合
 * @param {*} arr4  右侧 checked 父级数组集合
 * @param {*} arr5  右侧 checked 子级数组集合
 * @param {*} arr6  左侧desc子级数组集合
 */

export function getArrDiffValue (arr1, arr2, arr3, arr4, arr5, arr6) {
  // let allDiffArr = {
  //     leftDiffParArr: null,
  //     rightDiffParArr: null
  // }
  const leftOriginParArr = []
  const rightOriginParArr = []
  const leftCheckedParArr = []
  const rightCheckedParArr = []
  const leftOriginChildArr = []
  const rightOriginChildArr = []
  const leftCheckedChildArr = []
  const RightCheckedChildArr = []
  // 左侧子级（desc）对右侧子级（checked） 不同点 在左侧弹数据
  arr6.forEach((item, i) => {
    // console.log(item, '=======', i)
    if (arr5.indexOf(item) === -1) {
      leftCheckedChildArr.push({
        value: i + 1,
        label: item,
        parLabel: 'desc'
      })
    }
    // console.log(leftCheckedChildArr, 'leftCheckedChildArr')
  })
  // 右侧父级（checked）对左侧父级（desc） 不同点 在右侧弹数据
  arr5.forEach((item, i) => {
    if (arr6.indexOf(item) === -1) {
      RightCheckedChildArr.push({
        value: i + 1,
        label: item,
        parLabel: 'checked'
      })
    }
  })

  // 左侧子级（desc）对右侧子级（original） 不同点 在左侧弹数据
  arr6.forEach((item, i) => {
    // console.log(item, '=======', i)
    if (arr3.indexOf(item) === -1) {
      leftOriginChildArr.push({
        value: i + 1,
        label: item,
        parLabel: 'desc'
      })
    }
  })
  // 右侧父级（original）对左侧父级（desc） 不同点 在右侧弹数据
  arr3.forEach((item, i) => {
    if (arr6.indexOf(item) === -1) {
      rightOriginChildArr.push({
        value: i + 1,
        label: item,
        parLabel: 'original'
      })
    }
  })

  // 左侧父级（desc）对右侧父级（original） 不同点 在左侧弹数据
  arr1.forEach((item, i) => {
    // console.log(item, '=======', i)
    if (arr2.indexOf(item) === -1) {
      leftOriginParArr.push({
        value: i + 1,
        label: item,
        parLabel: 'desc'
      })
    }
  })
  // 右侧父级（original）对左侧父级（desc） 不同点 在右侧弹数据
  arr2.forEach((item, i) => {
    if (arr1.indexOf(item) === -1) {
      rightOriginParArr.push({
        value: i + 1,
        label: item,
        parLabel: 'original'
      })
    }
  })
  // 左侧父级（desc）对右侧父级（checked） 不同点 在左侧弹数据
  arr1.forEach((item, i) => {
    // console.log(item, '=======', i)
    if (arr4.indexOf(item) === -1) {
      leftCheckedParArr.push({
        value: i + 1,
        label: item,
        parLabel: 'desc'
      })
    }
  })
  // 右侧父级（checked）对左侧父级（desc） 不同点 在右侧弹数据
  arr4.forEach((item, i) => {
    if (arr1.indexOf(item) === -1) {
      rightCheckedParArr.push({
        value: i + 1,
        label: item,
        parLabel: 'checked'
      })
    }
  })

  // console.log(leftDiffArr, rightDiffArr)
  return {
    allArr: {
      leftOriginParArr: leftOriginParArr,
      rightOriginParArr: rightOriginParArr,
      leftCheckedParArr: leftCheckedParArr,
      rightCheckedParArr: rightCheckedParArr,
      leftOriginChildArr: leftOriginChildArr,
      rightOriginChildArr: rightOriginChildArr,
      leftCheckedChildArr: leftCheckedChildArr,
      RightCheckedChildArr: RightCheckedChildArr
    }
  }
}

export function isJson (str, str2) {
  // let leftErr = ''
  // let rightErr = ''
  if (typeof str === 'string') {
    try {
      var obj = JSON.parse(str)
      if (typeof obj === 'object' && obj) {
        return true
      } else {
        return false
      }
    } catch (e) {
      // leftErr = e
      // console.log('error：' + str + '!!!' + e)
      return false
    }
  }
  if (typeof str2 === 'string') {
    try {
      var obj2 = JSON.parse(str2)
      if (typeof obj2 === 'object' && obj2) {
        return true
      } else {
        return false
      }
    } catch (e) {
      // console.log('error：' + str + '!!!' + e)
      // alert(e)
      // rightErr = e
      // return e
      return false
    }
  }
  // console.log('It is not a string!')
  // console.log(leftErr, rightErr)
}
// 传入的对象必须是{a:[],b:[]}格式
export function objToArr (obj) {
  const objArr = Object.keys(obj)
  // console.log(objArr)
  const arrAll = []
  objArr.forEach(item => {
    arrAll.push(obj[item])
  })
  // console.log([].concat.apply([], arrAll).length, 'arrAll', arrAll)
  return [].concat.apply([], arrAll)
}
